// 判断是否为数组
export function isArray<T>(arg: T) {
  // 首先检查环境中是否存在 Array.isArray 方法（现代浏览器和Node.js都支持）
  // 如果存在，直接使用这个原生方法判断
  // 如果不存在（极老的浏览器环境），回退到使用 Object.prototype.toString 方法
  // 通过 call 方法改变 this 指向为传入的参数
  // 检查返回的字符串是否为 "[object Array]"
  return Array.isArray
    ? Array.isArray(arg)
    : Object.prototype.toString.call(arg) === '[object Array]'
}

// 判断是否为字符串
export function isString(str: unknown) {
  // typeof 操作符检查原始字符串类型
  // instanceof 检查字符串对象（通过 new String() 创建的）
  return typeof str === 'string' || str instanceof String
}

// 判断是否为外链
export function isExternal(path: string) {
  const reg = /^(https?:|mailto:|tel:)/
  return reg.test(path)
}
